﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using WebArchivosTelefonica.Jerarquias;

namespace WebArchivosTelefonica
{
    /// <summary>
    /// Accion sobre el estado de los documentos
    /// </summary>
    public enum AccionEstado
    {
        /// <summary>
        /// Aprobado
        /// </summary>
        Aprobar,
        /// <summary>
        /// Rechazado
        /// </summary>
        Rechazar
    }
    /// <summary>
    /// Clase para administrar el flujo de estados de lso documentos 
    /// </summary>
    public static class AdministradorEstados
    {
        /// <summary>
        /// Método que calcula el cambio de estado dependiendo la accion y el estado inicial
        /// </summary>
        /// <param name="idEstadoInicial"></param>
        /// <param name="accion"></param>
        /// <returns></returns>
        public static int CambiarEstado(int idEstadoInicial, AccionEstado accion)
        {
            int idEstadoFinal = int.MinValue;
            // si ninguna de las condiciones se cumple, el estado se mantiene igual
            idEstadoFinal = idEstadoInicial;
            switch (idEstadoInicial)
            {
                //cuando el estado es ninguno
                case 0:
                    if (accion == AccionEstado.Aprobar)
                        idEstadoFinal = 1;
                    break;
                case 1:
                    if (accion == AccionEstado.Aprobar)
                    {
                        idEstadoFinal = 2;
                    }
                    else if (accion == AccionEstado.Rechazar)
                    {
                        idEstadoFinal = 6;
                    }
                    break;
                case 2:
                    if (accion == AccionEstado.Rechazar)
                    {
                        idEstadoFinal = 7;
                    }
                    else if (accion == AccionEstado.Aprobar)
                    {
                        idEstadoFinal = 3;
                    }
                    break;
                case 3:
                    if (accion == AccionEstado.Rechazar)
                    {
                        idEstadoFinal = 8;
                    }
                    else if (accion == AccionEstado.Aprobar)
                    {
                        idEstadoFinal = 4;
                    }
                    break;
                case 4:
                    if (accion == AccionEstado.Rechazar)
                    {
                        idEstadoFinal = 9;
                    }
                    else if (accion == AccionEstado.Aprobar)
                    {
                        idEstadoFinal = 5;
                    }
                    break;
                case 5:
                    if (accion == AccionEstado.Rechazar)
                    {
                        idEstadoFinal = 9;
                    }
                    break;
                case 6:
                    if (accion == AccionEstado.Aprobar)
                        idEstadoFinal = 1;
                    break;
                case 7:
                    if (accion == AccionEstado.Aprobar)
                    {
                        idEstadoFinal = 2;
                    }
                    if (accion == AccionEstado.Rechazar)
                    {
                        idEstadoFinal = 6;
                    }
                    break;

                case 8:
                    if (accion == AccionEstado.Aprobar)
                    {
                        idEstadoFinal = 3;
                    }
                    if (accion == AccionEstado.Rechazar)
                    {
                        idEstadoFinal = 7;
                    }
                    break;
                case 9:
                    if (accion == AccionEstado.Aprobar)
                    {
                        idEstadoFinal = 4;
                    }
                    if (accion == AccionEstado.Rechazar)
                    {
                        idEstadoFinal = 8;
                    }
                    break;
                default:
                    break;
            }
            return idEstadoFinal;
        }
    }
}
